home *** CD-ROM | disk | FTP | other *** search
/ Delphi Informant Complete 1995 - 2000 / Delphi Informant Complete 1995 to 2000.iso / Delphi Informant Magazine Complete Works SOURCE CODE 1998.rar / 1998 / May / di9805fn / StrTst03.pas < prev   
Pascal/Delphi Source File  |  1998-01-13  |  10KB  |  323 lines

  1. unit StrTst03;
  2. { Related to my File|New Column on AnsiStrings in Delphi Informant, May, 1998.
  3.   This project demonstrates routines in the HyperString library from
  4.   EFD Systems.  To download the free Delphi 3 *.dcu (HSTR.ZIP) needed
  5.   to run this program, visit their Web Site at www.mindspring.com/~efd.
  6.   Also, be sure to read the paper on AnsiStrings while you're there.
  7.   To report bugs or make suggestions, please E-Mail me at acmdoc@aol.com.
  8.   Thanks, and enjoy!  Alan C. Moore }
  9.  
  10. interface
  11.  
  12. uses
  13.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  14.   ComCtrls, StdCtrls, ExtCtrls;
  15.  
  16. const
  17. MinusNumMask : string = '#09999\.999';
  18.  
  19. type
  20.   TForm1 = class(TForm)
  21.     PageControl1: TPageControl;
  22.     TabSheet1: TTabSheet;
  23.     Label1: TLabel;
  24.     StringEntered: TEdit;
  25.     RadioGroup1: TRadioGroup;
  26.     Label2: TLabel;
  27.     StringReturned: TEdit;
  28.     Label3: TLabel;
  29.     NumReturned: TEdit;
  30.     Label4: TLabel;
  31.     SubStr: TEdit;
  32.     Label5: TLabel;
  33.     NumToUse: TEdit;
  34.     SecondNum: TEdit;
  35.     Label6: TLabel;
  36.     Label7: TLabel;
  37.     SubStr2: TEdit;
  38.     TabSheet2: TTabSheet;
  39.     SeachText: TLabel;
  40.     SearchText: TEdit;
  41.     PerformActionsBtn: TButton;
  42.     OpenFileBtn: TButton;
  43.     OpenDialog1: TOpenDialog;
  44.     RadioGroup2: TRadioGroup;
  45.     Memo1: TMemo;
  46.     Label8: TLabel;
  47.     SecondString: TEdit;
  48.     ResultLbl: TLabel;
  49.     ResultField: TEdit;
  50.     procedure RadioGroup1Click(Sender: TObject);
  51.     procedure PerformActionsBtnClick(Sender: TObject);
  52.     procedure OpenFileBtnClick(Sender: TObject);
  53.     procedure RadioGroup2Click(Sender: TObject);
  54.     procedure FormCreate(Sender: TObject);
  55.   private
  56.     { Private declarations }
  57.   public
  58.     { Public declarations }
  59.     FirstSubString,
  60.     SecondSubString,
  61.     StringIn,
  62.     StringOut : string;
  63.     Count,
  64.     NumberReturned : Integer;
  65.     FileIsOpen : boolean;
  66.   end;
  67.  
  68. var
  69.   Form1: TForm1;
  70.  
  71. implementation
  72. uses HyperStr;
  73. {$R *.DFM}
  74.  
  75. // First Notebook Page Routine
  76. procedure TForm1.RadioGroup1Click(Sender: TObject);
  77. var
  78.   Start,
  79.   Count : integer;
  80.   RefChar, RefChar2 : char;
  81.  
  82.   procedure SetCountAsLength;
  83.   begin
  84.     if (SecondNum.text='') OR NOT IsNum(SecondNum.text) then
  85.        Count := Length(StringEntered.Text)
  86.          else
  87.        Count := StrToInt(SecondNum.text);
  88.   end;
  89.  
  90.   procedure SetCountAs1;
  91.   begin
  92.     if (SecondNum.text='') OR NOT IsNum(SecondNum.text) then
  93.        Count := 1
  94.          else
  95.        Count := StrToInt(SecondNum.text);
  96.   end;
  97.  
  98.   procedure SetStartAs1;
  99.   begin
  100.     if (NumToUse.text='') OR NOT IsNum(NumToUse.text) then
  101.     Start := 1
  102.       else
  103.     Start := StrToInt(NumToUse.text);
  104.   end;
  105.  
  106.   procedure SetRefChar;
  107.   begin
  108.     if SubStr.Text='' then
  109.      RefChar := '_'
  110.        else
  111.      RefChar := SubStr.Text[1];
  112.   end;
  113.  
  114.   function NumCheck: boolean;
  115.   begin
  116.     Result := IsNum(NumToUse.text);
  117.     if NOT Result then
  118.        begin
  119.          MessageDlg('Proper Integer Must be Entered', mtError, [mbOK], 0);
  120.          SetFocusedControl(NumToUse);
  121.        end;
  122.   end;
  123.  
  124. begin
  125.   if StringEntered.text='' then
  126.     begin
  127.       MessageDlg('No String Entered', mtError, [mbOK], 0);
  128.       Exit;
  129.     end;
  130.   // initialize output fields for some cases
  131.   StringOut := StringEntered.text;
  132.   NumberReturned := 0;
  133.   case RadioGroup1.ItemIndex of    { main case for Page One }
  134.     -1 : exit;
  135.     0:    NumberReturned := MakeNum(StringOut);
  136.     1:    NumberReturned := MakeFloat(StringOut);
  137.     2:    begin
  138.           if NOT NumCheck then Exit;
  139.           Count := StrToInt(NumToUse.text);
  140.           NumberReturned := MakeFixed(StringOut, Count);
  141.           end;
  142.     3:    NumberReturned := MakeAlpha(StringOut);
  143.     4:    NumberReturned := MakeAlphaNum(StringOut);
  144.     5:    begin
  145.             if NOT NumCheck then Exit;
  146.             Count := StrToInt(NumToUse.text);
  147.             RefChar := StringEntered.Text[1];
  148.             StringOut :=  DupChr(RefChar, Count);
  149.            end;
  150.     6:    begin
  151.             SetCountAsLength;
  152.             UCase(StringOut, 1, Count);
  153.           end;
  154.     7:    begin
  155.             SetCountAsLength;
  156.             LCase(StringOut, 1, Count);
  157.            end;
  158.     8:    begin
  159.             StringOut := StringEntered.Text;
  160.             ProperCase(StringOut);
  161.            end;
  162.     9:    begin
  163.             SetStartAs1;
  164.             SetRefChar;
  165.             FillStr(StringOut, Start, RefChar);
  166.           end;
  167.     10:   begin
  168.             SetStartAs1;
  169.             SetCountAs1;
  170.             SetRefChar;
  171.             FillCnt(StringOut, Start, Count, RefChar);
  172.           end;
  173.     11:   NumberReturned := Compact(StringOut);
  174.     12:   begin
  175.             RefChar := StringEntered.Text[1];
  176.             NumberReturned := DeleteC(StringOut, RefChar);
  177.           end;
  178.     13:   begin
  179.             RefChar := StringEntered.Text[1];
  180.             NumberReturned := DeleteD(StringOut, RefChar);
  181.           end;
  182.     14:   begin
  183.             RefChar := StringEntered.Text[1];
  184.             RefChar2 := StringEntered.Text[2];
  185.             ReplaceC(StringOut, RefChar, RefChar2);
  186.           end;
  187.     15:   begin
  188.             FirstSubString :=  SubStr.Text;
  189.             SecondSubString := SubStr2.Text;
  190.             ReplaceS(StringOut, FirstSubString, SecondSubString);
  191.           end;
  192.     16:   RevStr(StringOut);
  193.     17:   begin
  194.             FirstSubString :=  SubStr.Text;
  195.             NumberReturned := DeleteT(StringOut, FirstSubString);
  196.             ReplaceS(StringOut, FirstSubString, SecondSubString);
  197.           end;
  198.     18:   begin
  199.             FirstSubString :=  SubStr.Text;
  200.             SecondSubString := SubStr2.Text;
  201.             ReplaceT(StringOut, FirstSubString, SecondSubString[1]);
  202.           end;
  203.     19:   begin
  204.             FirstSubString :=  SubStr.Text;
  205.             SecondSubString := SubStr2.Text;
  206.             Translate(StringOut, FirstSubString, SecondSubString);
  207.           end;
  208.  
  209.   end;    { Main Page One case }
  210.   StringReturned.Text := StringOut;
  211.   NumReturned.Text := IntToStr(NumberReturned);
  212. end;
  213.  
  214. procedure TForm1.PerformActionsBtnClick(Sender: TObject);
  215. begin
  216.   if SearchText.Text='' then
  217.   begin
  218.     MessageDlg('Search Text Must be Entered', mtError, [mbOK], 0);
  219.     Exit;
  220.   end;
  221.   RadioGroup2Click(RadioGroup2);
  222. end;
  223.  
  224. procedure TForm1.OpenFileBtnClick(Sender: TObject);
  225. var
  226. J : integer;
  227.   begin
  228.     StringIn := '';
  229.     if OpenDialog1.Execute then begin
  230.     FileIsOpen := true;
  231.     Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
  232.     for j := 0 to Memo1.Lines.Count-1 do    { Iterate }
  233.     begin
  234.       StringIn := Concat(StringIn, Memo1.Lines[j]) ;
  235.     end;    { for }
  236.  
  237.   end;
  238.  
  239. end;
  240.  
  241. procedure TForm1.RadioGroup2Click(Sender: TObject);
  242. begin
  243. // first case checks for errors of ommision
  244. case RadioGroup2.ItemIndex of    { general testing case  }
  245.   -1: Exit;
  246.    0..2:  if ((SearchText.Text='') or (SecondString.Text='')) then
  247.              begin
  248.                MessageDlg('Text Must be Entered in both Edit Fields', mtError, [mbOK], 0);
  249.                Exit;
  250.              end;
  251.    3..11:   begin
  252.              if NOT FileIsOpen then
  253.              begin
  254.                MessageDlg('No File Open', mtError, [mbOK], 0);
  255.                Exit;
  256.              end;
  257.              if SearchText.Text='' then
  258.               begin
  259.                MessageDlg('No Search Text Entered', mtError, [mbOK], 0);
  260.                Exit;
  261.               end;
  262.              end;
  263. end;    { general testing case }
  264.  
  265. case RadioGroup2.ItemIndex of   { specific testing case  }
  266.      3,5,6,7,8,9: if NOT IsNum(SecondString.Text) then
  267.              begin
  268.                MessageDlg('Number must be entered in Second String', mtError, [mbOK], 0);
  269.                Exit;
  270.              end;
  271.      4,10,11:   if NOT IsMask(SecondString.Text,
  272.                   MinusNumMask,-1) then
  273.              begin
  274.                MessageDlg('Integer or -1 must be entered in Second String', mtError, [mbOK], 0);
  275.                Exit;
  276.              end;
  277.  
  278.  
  279.  
  280.  
  281. end;    {  specific testing case   }
  282.  
  283. case RadioGroup2.ItemIndex of    { main case  }
  284.   0: ResultField.Text := IntToStr(Similar(Sear